package com.htx.zqs.blesmartmask.custom.mpandroidchart;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.utils.ViewPortHandler;
import com.htx.zqs.blesmartmask.R;
import com.htx.zqs.blesmartmask.bean.BeforeCourseData;
import com.htx.zqs.blesmartmask.bean.Contants;
import com.htx.zqs.blesmartmask.bean.ThirdItemInfoBean;
import com.htx.zqs.blesmartmask.bean.UserInfos;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by zhao on 2018/7/12.
 */

public class BeforeMpChartManger {

    private static String lineName  = null;
    private static String lineName1 = null;
    private static ArrayList<String> xValues;

    /**
     * 创建一条折线
     *
     * @param context    上下文
     * @param mLineChart 对象
     * @param count      X轴的数据
     * @param arrayList  Y轴的数据
     * @return LineData
     */
    public static LineData initSingleLineChart(Context context, LineChart mLineChart, int count, ArrayList<UserInfos> arrayList) {

        ArrayList<String> xValues = new ArrayList<String>();
        for (int i = 0; i < count; i++) {
            // x轴显示的数据，这里默认使用数字下标显示
            xValues.add((i) + ":00");
        }

        // y轴的数据
        ArrayList<Entry> yValues = new ArrayList<Entry>();
        for (int i = 0; i < count; i++) {
            yValues.add(new Entry(arrayList.get(i).getBeforeFfat(), i));
        }
        //设置折线的样式
        LineDataSet dataSet = new LineDataSet(yValues, lineName);
        //用y轴的集合来设置参数
        dataSet.setLineWidth(1.75f); // 线宽
        dataSet.setCircleSize(2f);// 显示的圆形大小
        dataSet.setColor(Color.rgb(89, 194, 230));// 折线显示颜色
        dataSet.setCircleColor(Color.rgb(89, 194, 230));// 圆形折点的颜色
        dataSet.setHighLightColor(Color.GREEN); // 高亮的线的颜色
        dataSet.setHighlightEnabled(true);
        dataSet.setValueTextColor(Color.rgb(89, 194, 230)); //数值显示的颜色
        dataSet.setValueTextSize(8f);     //数值显示的大小

        ArrayList<LineDataSet> dataSets = new ArrayList<>();
        dataSets.add(dataSet);

        //构建一个LineData  将dataSets放入
        LineData lineData = new LineData();
        return lineData;
    }


    /**
     * @param arrayList
     * @param context    上下文
     * @param mLineChart 折线图控件
     * @param count      折线在x轴的值
     * @Description:创建两条折线
     */
    public static LineData initDoubleLineChart(Context context, LineChart mLineChart, int count, List<BeforeCourseData> arrayList) {
        /*
         * 一个点不显示 强制显示两个点 左边点为0 x轴为空
         * 没有数据的时候 设置显示一个点  防止错位
         *
         *
         * */
        xValues = new ArrayList<String>();
        if (count == 0) {
            xValues.add("dd");
        } else if (count == 1) {
            xValues.add("");
            xValues.add(arrayList.get(0).getBeforedate());
        } else {
            for (int i = 0; i < count; i++) {
                xValues.add(arrayList.get(i).getBeforedate());
                Log.e("======", xValues + "========");
            }

        }
        // y轴的数据
        ArrayList<Entry> yValues1 = new ArrayList<Entry>();

        if (count == 1) {
            yValues1.add(new Entry(0, 0));
            yValues1.add(new Entry(1, arrayList.get(0).getBeforeffat()));
        } else if (count == 0) {
            yValues1.add(new Entry(0, 0));
        } else {
            for (int i = 0; i < count; i++) {
                yValues1.add(new Entry(i, arrayList.get(i).getBeforeffat()));
                // yValues1.add(new Entry(20, i));
            }
        }

        // y轴的数据
        ArrayList<Entry> yValues2 = new ArrayList<Entry>();
        if (count == 0) {
            yValues2.add(new Entry(0, 0));
        } else if (count == 1) {
            yValues2.add(new Entry(0, 0));
            yValues2.add(new Entry(1, arrayList.get(0).getBeforefwater()));
        } else {

            for (int i = 0; i < count; i++) {
                yValues2.add(new Entry(i, arrayList.get(i).getBeforefwater()));
            }

        }

        LineDataSet dataSet = new LineDataSet(yValues1, lineName);
        dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        //dataSet.enableDashedLine(10f, 10f, 0f);//将折线设置为曲线(即设置为虚线)
        //dataSet.setDrawCircles(true);
        //用y轴的集合来设置参数
        //   dataSet.setValues(yValues1);
        dataSet.setLineWidth(1.75f); // 线宽
        dataSet.setCircleSize(3f);// 显示的圆形大小
        dataSet.setColor(context.getResources().getColor(R.color.fat));// 折线显示颜色
        dataSet.setCircleColor(context.getResources().getColor(R.color.fat));// 圆形折点的颜色
        dataSet.setHighLightColor(Color.TRANSPARENT); // 高亮的线的颜色
        dataSet.setHighlightEnabled(true);
        dataSet.setValueTextColor(Color.GRAY); //数值显示的颜色
        dataSet.setValueTextSize(8f);     //数值显示的大
        dataSet.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                int n = (int) value;
                return n + "";
            }
        });
        LineDataSet dataSet1 = new LineDataSet(yValues2, lineName1);
        dataSet1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        //用y轴的集合来设置参数
        dataSet1.setLineWidth(1.75f);
        dataSet1.setCircleSize(3f);
        dataSet1.setColor(context.getResources().getColor(R.color.water));
        dataSet1.setCircleColor(context.getResources().getColor(R.color.water));
        dataSet1.setHighLightColor(Color.TRANSPARENT);
        dataSet1.setHighlightEnabled(true);
        dataSet1.setValueTextColor(Color.GRAY);
        dataSet1.setValueTextSize(8f);
        dataSet1.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                int n = (int) value;
                return n + "";
            }
        });
        //构建一个类型为LineDataSet的ArrayList 用来存放所有 y的LineDataSet   他是构建最终加入LineChart数据集所需要的参数
        ArrayList<ILineDataSet> dataSets = new ArrayList<>();

        //将数据加入dataSets
        dataSets.add(dataSet);
        dataSets.add(dataSet1);

        //构建一个LineData  将dataSets放入
        LineData lineData = new LineData(dataSets);
        return lineData;
    }

    /**
     * @Description:初始化图表的样式
     */
    public static void initDataStyle(LineChart lineChart, LineData lineData, Context context, int size, int type) {
        //设置点击折线点时，显示其数值
//        MyMakerView mv = new MyMakerView(context, R.layout.item_mark_layout);
//        mLineChart.setMarkerView(mv);
        if (size >= Contants.CHART_X_COUNT) {
            size = Contants.CHART_X_COUNT;
        }
        if (size == 1) {
            size = 2;
        }
        if (size == 0) {
            size = 1;
        }
        lineChart.setDrawBorders(false); //在折线图上添加边框
        //lineChart.setDescription("时间/数据"); //数据描述
        lineChart.setDrawGridBackground(false); //表格颜色
        lineChart.setGridBackgroundColor(Color.GRAY & 0x70FFFFFF); //表格的颜色，设置一个透明度
        lineChart.setTouchEnabled(true); //可点击
        lineChart.setDragEnabled(true);  //可拖拽
        lineChart.setScaleEnabled(false);  //可缩放
        lineChart.setPinchZoom(false);
        lineChart.setBackgroundColor(Color.WHITE); //设置背景颜色
        lineChart.setExtraOffsets(10, 10, 30, 10);
        lineChart.setData(lineData);

        Legend mLegend = lineChart.getLegend(); //设置标示，就是那个一组y的value的
        mLegend.setForm(Legend.LegendForm.SQUARE); //样式
        mLegend.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);

        mLegend.setFormSize(8f); //字体

        mLegend.setTextColor(Color.GRAY); //颜色

        lineChart.setVisibleXRange(0, size - 1);
        //x轴可显示的坐标范围

        final XAxis xAxis = lineChart.getXAxis();  //x轴的标示
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //x轴位置
        xAxis.setAvoidFirstLastClipping(true);
        xAxis.setTextColor(Color.GRAY);    //字体的颜色
        xAxis.setTextSize(8f); //字体大小

        xAxis.setLabelCount(size, true);
        //x轴可显示的坐标个数

        xAxis.setGridColor(Color.GRAY);//网格线颜色
        xAxis.setDrawGridLines(false); //不显示网格线
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                //  Log.e("===value", value + "===");
                //  Log.e("===value", (xValues.get((int) value % xValues.size())) + "===");
//                if (xValues.size() < value-1) {
//                    return "";
//                }else if (value == 1){
//                    return "";
//                }
//                else {
                return xValues.get((int) (value) % xValues.size());
//                }
            }
        });
        YAxis axisLeft = lineChart.getAxisLeft(); //y轴左边标示
        YAxis axisRight = lineChart.getAxisRight(); //y轴右边标示
        axisLeft.setTextColor(Color.GRAY); //字体颜色
        axisLeft.setLabelCount(6, true); //显示格数
        if (type == 1) {
            axisLeft.setAxisMinimum(7f);
            axisLeft.setAxisMaximum(73f);
        }else if (type == 2){
            axisLeft.setAxisMinimum(0f);
            axisLeft.setAxisMaximum(80f);
        }
        axisLeft.setTextSize(10f); //字体大小
//        axisLeft.setAxisMaxValue(80f); //最大值  --Y最大值
        axisLeft.setGridColor(Color.GRAY); //网格线颜色
        axisRight.setDrawAxisLine(false);
        axisRight.setDrawGridLines(false);
        axisRight.setDrawLabels(false);

        //设置动画效果
        //  lineChart.animateY(2000 / 6 * size, Easing.EasingOption.Linear);
        lineChart.animateX(2500 / 6 * size, Easing.EasingOption.Linear);

        lineChart.invalidate();
        // lineChart.animateX(2500);  //立即执行动画
    }



    /**
     * @param name
     * @Description:设置折线的名称
     */

    public static void setLineName(String name) {
        lineName = name;
    }

    /**
     * @param name
     * @Description:设置另一条折线的名称
     */
    public static void setLineName1(String name) {
        lineName1 = name;
    }

}
